#pragma once

#include "Observer/Observer.hpp"
#include "Object.h"

#include <set>

/** @class Data
  * @brief Базовый класс данных
  */
class Data : public Object
{
private:
    std::set< Observer* > m_observers;    // Список всех наблюдателей

public:
    /**
      * Конструктор
      */
    Data();

    /**
      * Добавить наблюдатель
      *
      * @param obs Наблюдатель
      */
    virtual void addObserver(Observer *obs);

    /**
      * Удалить наблюдателя
      *
      * @param obs Наблюдатель
      */
    virtual void removeObserver(Observer *obs);

    /**
      * Обновить всех наблюдателей
      */
    virtual void updateNotification();

    /**
      * Деструктор
      */
    virtual ~Data();
};

